package com.jky.trial.service;


import com.jky.trial.common.BaseResult;
import com.jky.trial.common.ListResult;
import com.jky.trial.entity.Category;
import com.jky.trial.entity.User;
import com.jky.trial.vo.CategoryVo;

import javax.servlet.ServletOutputStream;
import java.io.OutputStream;
import java.util.List;

public interface CategoryService {
    /**
     * 创建
     *
     * @param record
     * @return
     */
    BaseResult create(Category record, User user);
    int save(Category record);

    BaseResult uploadReport(Category record, User user);

    Category selectLatestOne(Category record);

    Category selectOne(Category record);

    List<CategoryVo> listByDr(CategoryVo record);

    /**
     * 寻找描述员所在钻机组
     * record.type 钻机组类型
     * record.pId  项目Id
     * record.rTargetId 描述员Id
     * record.rType 钻机-描述员关系类型
     *
     * @param record
     * @return
     */
    Category selectZjzByDescer(CategoryVo record);

    /**
     * 更新
     *
     * @param record
     * @return
     */
    int update(Category record);

    /**
     * 提交确认单至试验室
     *
     * @param record
     * @return
     */
    BaseResult submitBill(Category record, User user);

    /**
     * 钻机组列表
     *
     * @param record
     * @return
     */
    ListResult zjList(CategoryVo record);

    /**
     * 发布试验成果报告
     *
     * @param record
     * @param user
     * @return
     */
    int publishReport(Category record, User user);

    /**
     * 任务书提交
     *
     * @param record
     * @param user
     * @return
     */
    BaseResult submitBook(Category record, User user);

    /**
     * 审核任务书
     *
     * @param record
     * @param user
     * @return
     */
    BaseResult checkBook(Category record, User user);

    /**
     * 删除
     *
     * @param id
     * @return
     */
    int del(int id);

    /**
     * 详情
     *
     * @param id
     * @return
     */
    Category detail(int id);

    /**
     * 确认单详情
     *
     * @param id
     * @return
     */
    CategoryVo billDetail(int id);

    /**
     * 导出委托书
     *
     * @param record
     * @param dutyName     项目责任人
     * @param outputStream
     * @return
     */
    OutputStream exportExcel(CategoryVo record, ServletOutputStream outputStream, String dutyName);

    CategoryVo moreDetail(int id);

    /**
     * 分页
     *
     * @param record
     * @return
     */
    List<CategoryVo> list(CategoryVo record);

    ListResult page(CategoryVo record);

    ListResult pageWithPerson(CategoryVo record);

    ListResult pageWithProject(CategoryVo record);

    ListResult withProjectByPermission(CategoryVo record, User user);

    /**
     * 统计
     *
     * @param record
     * @return
     */
    long count(CategoryVo record);

}
